<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Mr.UBKey
 * Date: 27/10/2011
 * Time: 17:32
 * To change this template use File | Settings | File Templates.
 */
#[Table('product_category')]
#[PrimaryKey('id')]
class Areas_Product_Models_Category extends XPHP_Model
{
    #[Command(insert = false, update = false)]
    public $id;

    #[Label('Tên danh mục')]
    #[Required(message = 'Tên danh mục là bắt buộc nhập')]
    #[MaxLength(255, message = 'Tên danh mục có tối đa 255 kí tự')]
    public $name;

    #[Label('Mô tả')]
    public $description;

    #[Label('Danh mục cha')]
    public $parent_id;

    #[Label('Sắp xếp')]
    public $sort;
    
    public $lang_id;

    /**
     * Lấy ra cây menu từ danh mục gốc
     * @return array
     */
    public function getCategoryTree($parent_id = 0)
    {
        return $this->_getCategoryTree($parent_id);
    }

    /**
     * Danh mục category sắp xếp hiển thị theo dạng cây
     * @var string
     */
    private $_categoryList = array();
    /**
     * Đánh dấu cấp độ của danh mục
     * @var int
     */
    private $_categoryLevel = 1;

    /**
     * Phương thức đệ quy lấy ra danh mục tin tức dạng cây
     * @param int $parent_id
     */
    private function _getCategoryTree($parent_id)
    {
        //Lấy ra toàn bộ danh mục menu con của root
        $cat = $this->db->where('parent_id', $parent_id)
        		->where('lang_id', $_SESSION['lang_id'])
                ->order_by('sort', 'asc')
                ->get()
                ->result();
        //Dấu gạch biểu thị cấp độ
        $prefix = "";
        for ($i = 0; $i < $this->_categoryLevel; $i++) {
            $prefix .= " ------ ";
        }
        if (count($cat) > 0) {
            foreach ($cat as $catItem) {
                $catItem->name = $prefix . $catItem->name;
                $this->_categoryList[] = $catItem;
                if ($this->countSubCategory($catItem->id)) {
                    $this->_categoryLevel++;
                    $this->_getCategoryTree($catItem->id);
                    $this->_categoryLevel--;
                }
            }
        }
        return $this->_categoryList;
    }

    /**
     * Phương thức lấy ra số danh mục con của một danh mục
     * @param int $parent_id
     */
    public function countSubCategory($parent_id)
    {
        //Lấy ra toàn bộ danh mục sản phẩm con của danh mục parent
        $cat = $this->db->where('parent_id', $parent_id)
                ->get()
                ->result();
        return count($cat);
    }

    /**
     * Lấy ra menu đa cấp
     * @return array
     */
    public function getCategoryMultiLevel($parent_id = 0)
    {
        return $this->_getCategoryMultiLevel($parent_id);
    }

    /**
     * Phương thức đệ quy lấy ra menu đa cấp
     * @param int $parent_id
     */
    private function _getCategoryMultiLevel($parent_id)
    {
        //Lấy ra toàn bộ menu item của danh mục parent
        $menu = $this->db->where('parent_id', $parent_id)
        				 ->where('lang_id', $_SESSION['lang_id'])
                         ->order_by('sort', 'asc')
                         ->get()
                         ->result();
        if (count($menu) > 0) {
            for ($i = 0; $i < count($menu); $i++) {
                if ($this->countSubCategory($menu[$i]->id)) {
                    $menu[$i]->subs = $this->_getCategoryMultiLevel($menu[$i]->id);
                }
            }
        }
        return $menu;
    }
    
    public function getName($id)
    {
    	$cat = $this->db->where('id', $id)->get()->result();
    	return $cat[0]->name;
    }
}